import axios from "axios";
import ReturnResult from '../utils/ReturnResult';

/**
 * 订单相关服务
 */
class OrderService {

    /**
     * 购物车结算，生成订单
     * @returns {Promise<ReturnResult>} 订单结算结果
     */
    async createOrder() {
        try {
            const resp = await axios.post('/order');
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.fail('订单结算失败');
    }

    /**
     * 获取我的订单
     * @param {number} pageNo 页码
     * @param {number} pageSize 页容量
     * @returns 我的订单
     */
    async getMyOrder(pageNo, pageSize) {
        try {
            const resp = await axios.get('/order', { params: { pageNo, pageSize} });
            return resp.data;
        } catch (err) {
            console.error(err);
        }
        return null;
    }

    /**
     * 获取所有订单
     * @param {number} pageNo 页码
     * @param {number} pageSize 页容量
     * @returns 订单
     */
    async getOrderList(pageNo, pageSize) {
        try {
            const resp = await axios.get('/order/list', { params: { pageNo, pageSize} });
            return resp.data;
        } catch (err) {
            console.error(err);
        }
        return null;
    }

    /**
     * 获取订单详情
     * @param {string} orderId 订单id
     * @returns 订单详情
     */
    async getOrderDetail(orderId) {
        try {
            const resp = await axios.get('/order/' + orderId);
            return resp.data;
        } catch (err) {
            console.error(err);
        }
        return null;
    }

    /**
     * 签收订单
     * @param {string} orderId 订单id
     * @returns {Promise<ReturnResult>} 签收结果
     */
    async receiverOrder(orderId) {
        try {
            const resp = await axios.put('/order/receiver/' + orderId);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.fail('订单签收失败');
    }

    /**
     * 订单发货
     * @param {string} orderId 订单id
     * @returns {Promise<ReturnResult>} 发货结果
     */
    async sendOrder(orderId) {
        try {
            const resp = await axios.put('/order/send/' + orderId);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.fail('订单发货失败');
    }

    /**
     * 删除订单
     * @param {string} orderId 订单id
     * @returns 删除结果
     */
    async deleteOrder(orderId) {
        try {
            const resp = await axios.delete('/order/' + orderId);
            return ReturnResult.from(resp.data);
        } catch (err) {
            console.error(err);
        }
        return ReturnResult.fail('订单删除失败');
    }
}

export default new OrderService();